public class Solution_08 {
    public int myAtoi(String str) {
        //得到字符串长度
        int len = str.length();
        //编程字符数组
        char[] charArray = str.toCharArray();

        //1、去空格，使index指向第一个非空的字符
        int index = 0;
        while (index < len && charArray[index] == ' ') {
            index++;
        }

        //2、如果为“      ”则直接返回
        if (index == len) {
            return 0;
        }

        //3、得到其正负号
        int sign = 1;
        char firstChar = charArray[index];
        if (firstChar == '+'){
            index++;
        }else if (firstChar == '-'){
            index++;
            sign = -1;
        }

        //4、字符串转数字
        //接收结果
        int res = 0;
        while (index < len){
            //当前遍历的字符串
            char currChar = charArray[index];
            // 1）是否为数字，如果不是则跳出循环
            if (currChar > '9' || currChar < '0'){
                break;
            }
            // 2）在进行累加之前先判断当前的值是否越界
            //大于最大整数
            if (res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && (currChar - '0') > Integer.MAX_VALUE % 10)){
                return Integer.MAX_VALUE;
            }
            //小于最小的负数
            if (res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && (currChar - '0') > -(Integer.MIN_VALUE % 10))){
                return Integer.MIN_VALUE;
            }
            // 3) 进行累加
            res = res * 10 + (currChar - '0') * sign;
            //下标向前移动
            index++;
        }
        //返回结果
        return res;
    }
    public static void main(String[] args) {
        Solution_08 solution = new Solution_08();
        String str = "2147483648";
        int res = solution.myAtoi(str);
        System.out.println(res);

        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);
    }

}
